import globals from 'globals';
import pluginJs from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginVue from 'eslint-plugin-vue';
import eslintConfigPrettier from 'eslint-config-prettier';

/** @type {import('eslint').Linter.Config[]} */
export default [
  // 生效文件
  { files: ['**/*.{js,mjs,cjs,ts,vue}'] },
  // 忽略文件
  {
    ignores: ['.config/*', '**/node_modules/', 'dist', 'public'],
  },
  { languageOptions: { globals: globals.browser } },
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs['flat/essential'],
  { files: ['**/*.vue'], languageOptions: { parserOptions: { parser: tseslint.parser } } },
  {
    extends: [
      'prettier', // 请确保prettier 放在最后
    ],
  },
  eslintConfigPrettier,
  {
    rules: {
      //  生产环境不允许控制台输出，开发允许允许控制台输出。
      'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
      'space-before-function-paren': 2, // 不允许函数的()前有空格
      'vue/no-multiple-template-root': 0,
      '@typescript-eslint/no-empty-function': 2, //是否允许出现空的函数
      '@typescript-eslint/no-explicit-any': [0], // 允许使用any
      '@typescript-eslint/no-var-requires': 0, // 项目中允许使用 require()语法。
      semi: 2, // 语句结尾分号
      quotes: [2, 'single'], //使用单引号
      'prefer-const': 2, // 开启不变的变量一定要使用const
      '@typescript-eslint/no-unused-vars': 0, // 允许出现未使用过的变量
      '@typescript-eslint/no-inferrable-types': 0, //  允许变量后面添加类型
      '@typescript-eslint/no-non-null-assertion': 0,
    },
  },
  {
    '@typescript-eslint/ban-types': [
      'error',
      {
        extendDefaults: true,
        types: {
          '{}': false,
        },
      },
    ],
  },
];
